home *** CD-ROM | disk | FTP | other *** search
/ C# & Game Programming - A…er's Guide (2nd Edition) / Buono 2nd Ed.iso / GameClasses / GameTimer.cs < prev    next >
Text File  |  2004-09-07  |  3KB  |  77 lines

  1. using System;
  2. using System.Windows.Forms;
  3. using System.Collections;
  4.  
  5. namespace GameClasses {
  6.     public class GameTimer {
  7.         // Member fields
  8.         Timer gameTimer;  // main timer object
  9.         int baseInterval; // base interval in ms
  10.         Hashtable events;  // list of TimedEvent objects
  11.     
  12.         // Default constructor
  13.         public GameTimer(int interval) {
  14.             events = new Hashtable();
  15.             gameTimer = new Timer();
  16.             gameTimer.Interval = interval;
  17.             gameTimer.Tick += new EventHandler(Tick);
  18.             baseInterval = interval;
  19.         }
  20.  
  21.         // Simple start and stop functionality.
  22.         public void Start() {gameTimer.Start();}
  23.         public void Stop() {gameTimer.Stop();}
  24.  
  25.         // Add an event to our game timer. Use stepFactor to control the 
  26.         // frequency the given TimedEvent's Tick() will be called.
  27.         // Use the given "key" for future reference to this TimedEvent.
  28.         public void addEvent(TimedEvent timedEvent, int stepFactor, 
  29.             string key) {
  30.             TimedEventNode node = new TimedEventNode();
  31.             node.data = timedEvent;
  32.             node.timeStep = stepFactor;
  33.             node.stepCount = 0;
  34.             events.Add(key, node);
  35.         }
  36.  
  37.         // Returns the event marked with the given key
  38.         public TimedEvent getEvent(string key) {
  39.             return ((TimedEventNode) events[key]).data;
  40.         }
  41.  
  42.         // Removes an event from the list
  43.         public void removeEvent(string key) {
  44.             events.Remove(key);
  45.         }
  46.  
  47.         // Changes the step associated with the event indexed by key
  48.         public void ChangeStep(string key, int stepFactor) {
  49.             ((TimedEventNode) events[key]).timeStep = stepFactor;
  50.         }
  51.  
  52.         // Tick() -- passes on tick event to proper TimedEvent objects
  53.         public void Tick(object sender, EventArgs e) {
  54.             IDictionaryEnumerator itemEnumerator = events.GetEnumerator();
  55.             TimedEventNode node;
  56.  
  57.             while (itemEnumerator.MoveNext()) {
  58.                 node = (TimedEventNode) itemEnumerator.Value;
  59.                 if (node.stepCount >= node.timeStep) {
  60.                     node.stepCount = 0;
  61.                     node.data.Tick();
  62.                 } else {
  63.                     node.stepCount++;
  64.                 }
  65.             }
  66.         }
  67.  
  68.         // Helper class to hold a extra information relevant to 
  69.         // timer event processing.
  70.         class TimedEventNode {
  71.             public int timeStep;  // how many baseInterval ticks to wait
  72.             public int stepCount; // counter to compare with timeStep
  73.             public TimedEvent data; // the TimedEvent object
  74.         }
  75.     }
  76. }
  77.